package ar.edu.utn.frba.gdaia.src.junittest.TreeUtil;

import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import javax.swing.tree.DefaultMutableTreeNode;

import junit.framework.TestCase;
import ar.edu.utn.frba.gdaia.src.domain.Canal;
import ar.edu.utn.frba.gdaia.src.domain.ConceptoElemental;
import ar.edu.utn.frba.gdaia.src.util.TreeUtil;

public class TreeUtilTest extends TestCase {

	List<DefaultMutableTreeNode> hojasAChequear;
	
	

	@Override
	protected void setUp() throws Exception {
		// TODO Auto-generated method stub
		super.setUp();
		System.out.println("Iniciando Test:"+TreeUtilTest.class);
	}



	@Override
	protected void tearDown() throws Exception {
		// TODO Auto-generated method stub
		super.tearDown();
		System.out.println("Finalizando Test:"+TreeUtilTest.class);
	}



	public void testHojas() {

		// creo el arbol.Esta es la raiz.
		DefaultMutableTreeNode tree = new DefaultMutableTreeNode();

		ConceptoElemental conceptoA1 = new ConceptoElemental(1, "rama",
				Canal.TECLADO);
		ConceptoElemental conceptoE3 = new ConceptoElemental(2, "hoja1",
				Canal.TECLADO);
		ConceptoElemental conceptoE4 = new ConceptoElemental(3, "hoja2",
				Canal.TECLADO);
		ConceptoElemental conceptoE5 = new ConceptoElemental(4, "hoja3",
				Canal.TECLADO);
		ConceptoElemental conceptoA2 = new ConceptoElemental(5, null,
				Canal.TECLADO);

		// creo los nodos
		DefaultMutableTreeNode dmtnA1 = new DefaultMutableTreeNode(conceptoA1);
		DefaultMutableTreeNode dmtnE3 = new DefaultMutableTreeNode(conceptoE3);
		DefaultMutableTreeNode dmtnE4 = new DefaultMutableTreeNode(conceptoE4);
		DefaultMutableTreeNode dmtnE5 = new DefaultMutableTreeNode(conceptoE5);
		DefaultMutableTreeNode dmtnA2 = new DefaultMutableTreeNode(conceptoA2);

		// creo la rama
		Set rama = new HashSet();
		rama.add(conceptoA1);

		// creo las hojas
		Set hojas = new HashSet();
		hojas.add(conceptoE3);
		hojas.add(conceptoE4);
		hojas.add(conceptoE5);

		System.out.println("ARBOL INICIAL:" + tree);
		TreeUtil.insertarPorLasHojas(tree, rama);
		System.out.println("ARBOL CON RAMA:" + tree);
		TreeUtil.insertarPorLasHojas(tree, hojas);
		System.out.println("ARBOL FINAL:" + tree);

		hojasAChequear = (List<DefaultMutableTreeNode>) TreeUtil
				.obtenerTodasLasHojas(tree);

		// debe ser false
		assertFalse(hojasAChequear.isEmpty());

		System.out.println("Hojas retornadas:" + hojasAChequear);

		for (Iterator it = hojasAChequear.iterator(); it.hasNext();) {
			DefaultMutableTreeNode nodo = (DefaultMutableTreeNode) it.next();
			if (!nodo.getUserObject().equals(conceptoE3))
				if (!nodo.getUserObject().equals(conceptoE4))
					if (!nodo.getUserObject().equals(conceptoE5))
						fail();
		}

		assertTrue(true);

	}

}
